#include<iostream>
#include<vector>
#include<assert.h>
using namespace std;
template<class T>
class Stack
{
public:
 Stack()
 {}
 ~Stack()
 {}
 void push(const T& val)
 {
  st.push_back(val);
 }
 void pop()
 {
  assert(!empty());
  st.pop_back();
 }
 bool empty() const
 {
  return st.empty();
 }
 size_t size() const 
 {
  return st.size();
 }
 T& top()  
 {
  assert(!empty());
  return st[size()-1];
 }
private:
  vector<T> st;
};
